package com.ai.aicodemather.core.saver;

import com.ai.aicodemather.ai.model.HtmlCodeResult;
import com.ai.aicodemather.ai.model.MultiFileCodeResult;
import com.ai.aicodemather.exception.BusinessException;
import com.ai.aicodemather.exception.ErrorCode;
import com.ai.aicodemather.exception.ThrowUtils;
import com.ai.aicodemather.model.enums.CodeGenTypeEnum;

import java.io.File;

/**
 * 代码文件保存执行器
 */
public class CodeFileSaverExecutor {

    private static final CodeFileSaverTemplate<HtmlCodeResult> htmlCodeFileSaverTemplate = new HtmlCodeFileSaverTemplate();
    private static final CodeFileSaverTemplate<MultiFileCodeResult> mutiFileCodeFileSaverTemplate = new MutiFileCodeFileSaverTemplate();

    /**
     * 统一代码保存执行器
     * 不同类型输出参数相同，但是出入参数是不同的
     *
     * @param result
     * @param codeGenTypeEnum
     * @return
     */
    public static File codeFileSaverExecutor(Object result, CodeGenTypeEnum codeGenTypeEnum, Long appId) {
        ThrowUtils.throwIf(result == null, ErrorCode.SYSTEM_ERROR, "代码为空");
        ThrowUtils.throwIf(codeGenTypeEnum == null, ErrorCode.SYSTEM_ERROR, "代码类型为空");
        // 根据代码类型选择不同的保存器
        return switch (codeGenTypeEnum) {
            case HTML -> htmlCodeFileSaverTemplate.saveCodeFile((HtmlCodeResult) result, appId);
            case MULTI_FILE -> mutiFileCodeFileSaverTemplate.saveCodeFile((MultiFileCodeResult) result, appId);
            default ->
                    throw new BusinessException(ErrorCode.SYSTEM_ERROR, "不支持的代码类型: " + codeGenTypeEnum.getValue());
        };
    }
}
